package s_004_Bean_Automatic_Assembly.config;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
import org.springframework.context.annotation.PropertySource;
import s_004_Bean_Automatic_Assembly.bean.ProfileData;

/**
 * Profile：Spring为我们提供的可以根据当前环境，动态的激活和切换一系列组件的功能；
 * 开发环境、测试环境、生产环境；
 * 数据源：(/A)(/B)(/C)；
 *
 * @Profile 指定组件在哪个环境的情况下才能被注册到容器中，不指定，任何环境下都能注册这个组件；
 * 1）、加了环境标识的 bean，只有这个环境被激活的时候才能注册到容器中。默认是default环境；
 * 2）、写在配置类上，只有是指定的环境的时候，整个配置类里面的所有配置才能开始生效；
 * 3）、没有标注环境标识的 bean 在，任何环境下都是加载的；
 * VM切换环境：-Dspring.profile.active=dev
 */
@PropertySource("classpath:/s_004_Bean_Automatic_Assembly.properties")
@Configuration
public class ProfileConfig {

    @Value("${db.user}")
    private String user;

    @Profile("test")
    @Bean
    public ProfileData getDataTest(@Value("${db.password}") String password, @Value("${db.driverClassTest}") String driverClass) {
        return new ProfileData(user, password, driverClass);
    }

    @Profile("dev")
    @Bean
    public ProfileData getDataDev(@Value("${db.password}") String password, @Value("${db.driverClassDev}") String driverClass) {
        return new ProfileData(user, password, driverClass);
    }

    @Profile("prod")
    @Bean("DataProd")
    public ProfileData getDataProd(@Value("${db.password}") String password, @Value("${db.driverClassProd}") String driverClass) {
        return new ProfileData(user, password, driverClass);
    }
}